(for Internet Explorer)
Sub  SyncFilesMenu::SetParentFolderProxyName( IndexNum as integer, Name as string )
親フォルダーの指定を、サブ・フォルダーに置き換えるように設定します。
【引数】
IndexNum
Name
フォルダー番号
サブ・フォルダー名
→ T_SyncFiles.vbs # T_SyncFilesParent
テスト
Set menu = new SyncFilesMenu
menu.IsCompareTimeStamp = False
menu.AddRootFolder  0, "Folder0"
menu.AddRootFolder  1, "Folder1"
menu.SetParentFolderProxyName  1, "_parent"
menu.AddFile  "..\Sample.txt"
サンプル
_parent
上記の場合、Folder0\..\Sample.txt と、Folder1\_parent\Sample.txt を比較します。
(src)
SynchronizeFolder  "C:\FolderA", "C:\FolderB", "C:\Synchronized", "*", Empty
Sub  SynchronizeFolder( FolderA_Path as string, FolderB_Path as string,
    SynchronizedPath as string, Mask as string, in_out_Options as Empty )
2つのフォルダーを同期します。
【引数】
FolderA_Path
FolderB_Path
同期をとるフォルダーのパス
同期をとるもう1つのフォルダーのパス
SynchronizedPath
同期した内容をとっておくフォルダーのパス
サンプル
ソース
Mask
in_out_Options
Empty を指定してください
ファイル名のフィルター(ワイルドカード)
テスト
→ T_SynchronizeFolder.vbs
→ ToolsLib.vbs
両方のフォルダーにある同じ名前のファイルが更新されていたら、手動で更新するように
エラーが表示されます。 hint_path にできたファイルに、手動で同期する必要がある
ファイルのパスが書かれています。 削除されたファイルや、タイムスタンプが過去に
戻ったファイルも手動で同期する必要があります。
<ERROR msg="自動で同期できないファイルがあります" hint_path="C:\hint.txt"/>
>SynchronizeFolder
    A: "C:\FolderA"
    B: "C:\FolderB"
以下のファイルが、両方のフォルダーで変更されました。

"1.txt"
Updated: "C:\FolderA\1.txt"
Updated: "C:\FolderB\1.txt"
例: C:\hint.txt
    If TryStart(e) Then  On Error Resume Next

        SynchronizeFolder  folder_A, folder_B, folder_S, "*.h", Empty

    If TryEnd Then  On Error GoTo 0
    If e.num <> 0 Then
        Set root = LoadXML( e.desc, F_Str )
        hint_path = root.getAttribute( "hint_path" )
        echo  ""
        echo  "自動で同期できないファイルのパスを、テキスト・エディターで表示します。"
        start  GetEditorCmdLine( hint_path )
        e.Raise
    End If
サンプル
エラーがあったら、その内容をエディターで開く
関連
参考
その他
Sub  SetDateLastModified( in_PathAndDate as dictionary of CDate )
タイムスタンプ(ファイルの更新日時)を設定します。
【引数】
in_PathAndDate
キーがタイムスタンプを更新するファイルのパス、アイテムが日付、の辞書
→ vbslib_helper.c
ソース
テスト
→ T_File.c
T_SetDateLastModified
→ vbslib.vbs
in_PathAndDate 引数のアイテムには、
を指定します。
サンプル
SetDateLastModified  Dict(Array( _
    "FileA.txt", CDate( "2008/06/16 12:00:00" ), _
    "FileB.txt", CDate( "2009/09/29 23:59:59" ) ))
関連
指定する日時のタイムゾーンは、ローカルです。
内部で、vbslib_helper.exe を呼び出しているため、ファイルを1つずつ指定すると遅くなります。。
の c.TimeStamp オプション
の Stamp
Sub  touch( Path as string )
タイムスタンプ(ファイルの更新日時)を現在の日時に更新します。
【引数】
Path
タイムスタンプを更新するファイルのパス
テスト
→ T_File.c
ソース
T_touch
→ vbslib.vbs
→ vbslib_helper.c
Path に指定したファイルが存在しないときは、空のファイルを作成します。
Sub  SetDateLastModifiedKS( in_PathAndDate as dictionary of CDate,  in_Option )
テキスト ファイルの中の $Date: 〜 $ にある日時のテキストを更新します。
【引数】
in_PathAndDate
キーが日時を更新するファイルのパス、アイテムが日付、の辞書
指定する日時のタイムゾーンは、ローカルです。
内部で、vbslib_helper.exe を呼び出しています。 ただし、in_Option = False を指定したときは、
呼び出しません。 その分、少し高速に処理しますが、$Date: の値を更新したことにより、
タイムスタンプが現在の日時になります。
in_PathAndDate 引数のアイテムを Empty にすると、現在のタイムスタンプに更新します。
in_PathAndDate 引数のアイテムを
in_Option
Empty, True = 通常、False = 高速、タイムスタンプは現在にする
または W3CDTF 形式の文字列の値にすると、
日時のテキストだけでなく、ファイルのタイムスタンプも更新します。
→ vbslib_helper.c
ソース
テスト
→ T_File.c
T_SetDateLastModified
→ vbslib.vbs
サンプル
SetDateLastModifiedKS  Dict(Array( _
    "FileA.txt",  Empty, _
    "FileB.txt",  "2009-09-29T23:59:59+09:00" )),  Empty
関連
in_PathAndDate 引数のキーを要素数2 の CSV形式(コンマ区切り)にすると、1つ目の要素を
入力ファイルのパス、2つ目の要素を出力ファイルのパスとして処理します。
SetDateLastModifiedKS  Dict(Array( _
    "FileA_Template.txt,  FileA.txt",  Empty )),  Empty
サンプル
FileA.txt ファイルの中の $Date: 〜 $ の中を W3CDTF 形式でファイルのタイムスタンプに
設定します。
FileB.txt ファイルの中の $Date: 〜 $ を下記のように変更します。(タイムゾーンが日本の場合)
// $Date: 2009-09-29T23:59:59+09:00 $
FileA_Template.txt ファイルの中の $Date: 〜 $ の中を W3CDTF 形式でファイルのタイム
スタンプに設定した FileA.txt ファイルを作成または上書きします。
キーワードは、必ず
Function  grep( Parameters as string, OutPath as string ) as array of GrepFound
ファイルの中で、指定したキーワードを含む行を検索します。
【引数】
Parameters
OutPath
オプションと、キーワードと、検索対象フォルダーやワイルドカード(複数可)
Empty または 検索結果の出力先のファイル・パス
返り値
    founds = grep( "-r ""define"" ""..\FolderA\*""", Empty )  '// as array of GrepFound

    '// 返り値のサンプル
    '// UBound( founds ) は、見つかった行数−1
    '// founds(0).Path     = "..\FolderA\grep_target1.txt"
    '// founds(0).LineNum  = 2
    '// founds(0).LineText = "  #define string"

    For Each  found  In  founds
        echo  found.LineText
    Next
Parameters は、Linux の
サンプル
"define" を検索する。 結果は返り値で取得する。
検索対象ファイルは、..\FolderA フォルダーで、サブ・フォルダーも含める。(-r)
grep_target1.txt:2:  define string
grep_target3.txt:2:  define string
grep_target3.txt:4:  define text
sub\grep_target1.txt:2:  define string
grep  "-r -i define *.txt *.ini", "grep_out.txt"
grep_out.txt ファイルのサンプル
"define" を検索する。 結果は、"grep_out.txt" ファイルに出力する。
検索対象ファイルは、拡張子が .txt と .ini で、サブ・フォルダーも含める。(-r)
大文字小文字は区別しない。(-i)
で指定してください。
正規表現 (Linux の egrep形式)
→ 正規表現
→ T_Grep.vbs
テスト
参考
関連
文字列の途中を取り出します。
Parameters に指定した検索対象のパスが、相対パスなら、Path プロパティも
相対パスになります。 そのときの基準フォルダーは、カレント・フォルダーになります。
GrepFound::Path プロパティ
\*
互換性
"|" (バーチカルライン)は、OR の意味になります。
"|" を検索したいときは、"\|" のようにエスケープしてください。
"-" を検索したいときは、"\-" のようにエスケープしてください。
"/"(スラッシュ)は、一般文字であり、エスケープする必要はありません。
+ のメタ文字を使うことができます。
→ 互換性
サンプル
    Set c = g_VBS_Lib
    founds = grep( "-r -l ""define"" ""..\FolderA\*""", c.NotEchoStartCommand )
    For Each  found  In  founds
        echo  found.Path
    Next
ファイル・パスの一覧を得る(-l オプション)
OutPath 引数と返り値
g_VBS_Lib.NotEchoStartCommand を指定すると、見つかった場所について、echo 表示しなく
なります。
単語単位はできません。
-u オプションがなければ、内部で、コマンドプロンプトの findstr コマンドを使用します。
-u オプションがあれば、内部で、VBScript.RegExp を使用します。
ソース
→ vbslib.vbs
キーワードがある行だけ抽出します。
ただし、オプションは、-r と -i と -l と --include のみ指定できます。
  -r : サブフォルダーも検索対象にする
  -i : 大文字と小文字を区別しないで検索する
  -l : キーワードを含むファイルのパスのみ出力する
    -L : キーワードを含まないファイルのパスを出力する
    -c : キーワードを含む行の数を取得するだけのため、返り値の LineNum を求める処理をしない
  --include : 拡張子を指定する
のパラメーターと同じです。
grep コマンド
-u オプション(vbslib オリジナル)を指定しないと、Unicode テキストにはヒットしません。
→ grep コマンド (Linux)
関連
\ 文字は bash を経由したときと同じになります。
つまり、\\ が \ に、\" が " に置き換わった後の文字列が、正規表現に適用されます。
例:
\(
を指定すると、一般文字の(制御文字でない)
\\(
(
\\\\
を指定すると、一般文字の(制御文字でない)
\
または
OutPath 引数に 検索結果の出力先のファイル・パスを指定すると、
例:
結果をファイルに出力する
表示され、返り値は Empty になります。 返り値を GrepFound オブジェクトの配列にしたい
ときは、OutPath 引数に Empty を指定してください。
のように
同様、
を使ったり、OutPath 引数に
の配列、または Empty
-u オプションを指定したときは、内部で
が使われます。
が使えます。 ただし、-u オプションが付いていないと無視されます。
テキストファイルだけを検索対象にする
サンプル
    Set ds = new CurDirStack

    extensions = g_Vers("TextFileExtension").Keys
    extensions = CSVFrom( extensions )
    extensions = Replace( extensions,  ",",  " *." )
    extensions = Left( "*." + extensions,  Len( extensions ) )

    cd  "..\FolderA"
    founds = grep( "-r ""define"" "+ extensions, Empty )  '// as array of GrepFound
    For Each  found  In  founds
        echo  found.Path
    Next
-u オプションがなければ、内部で、コマンドプロンプトの findstr コマンドを使用します。
なぜなら、
で表示しながら検索するため。
Sub  SortGrepFoundArray( Founds as array of GrepFound )
GrepFound クラスのオブジェクトの配列をソートします。
【引数】
Founds
GrepFound クラスのオブジェクトの配列
ソース
→ vbslib.vbs
関連
→ T_Grep.vbs
テスト
ソース
→ vbslib.vbs
T_GrepClass1
T_Grep1 の *_U (grep -u の内部で使っている)
ファイルの中で、指定したキーワードを含む行を検索します。
.IsRecurseSubFolders
サブ・フォルダーも再帰的に検索対象にする。
Execute の TargetPath 引数に PathDictionaryClass
を指定したときは、無視されます
.IsOutFileNameOnly
boolean
boolean
ファイル名のみ出力する
.IsInvertMatch
キーワードにマッチしないものを出力する
boolean
.IsHitCount
LineNum を求める処理をしない
boolean
.IgnoreCase
.Pattern
string
boolean
検索キーワード
(正規表現)
大文字小文字を区別しないかどうか
Function
指定したファイルの中に対して、検索を実行する
\ は、bash を経由しないときと同じになります。
"" を指定すると .IsOutFileNameOnly = True なら、
すべてのファイルを検索結果に含めます。
にあるメンバーと同じものは、同じ名前にしています。
サンプル
Set a_grep = new GrepClass
a.grep.Pattern = "</?xml>"
founds = a_grep.Execute( "folder\*.txt" )
Function  GrepClass::Execute( TargetPath as variant ) as array of GrepFound
ファイルの中で、指定したキーワードを含む行を検索します。
【引数】
TargetPath
検索対象フォルダーやワイルドカード(複数可)、または
返り値
の配列、または Empty
TargetPath 引数は、
の Execute メソッドの引数と異なります。
サンプル
founds = a_grep.Execute( "folder\*.txt" )
founds = a_grep.Execute( Array( "folder_A\*.txt", "folder_B\*.txt" ) )
paths = ArrayFromWildcard( "folder" )
paths.AddRemove  "folder\.svn"
founds = a_grep.Execute( paths )
Function  ToRegExpPattern( NotEscapedString as string ) as string
egrep 仕様・VBScript 仕様の正規表現で使われるメタ文字も検索できるように変換します。
【引数】
NotEscapedString
メタ文字も含む可能性がある検索キーワード
返り値
メタ文字をエスケープした検索キーワード
Assert  ToRegExpPattern( "[0](1)\" ) = "\[0\]\(1\)\\"
サンプル
参考
ソース
関連
→ T_Grep.vbs # [T_GrepKeyword]
テスト
→ vbslib.vbs
→ 正規表現
→ 互換性 (正規表現)
Function  ToOldRegExpPattern( NotEscapedString as string ) as string
grep 仕様の正規表現で使われるメタ文字も検索できるように変換します。
Assert  ToOldRegExpPattern( "[0](1)\" ) = "\[0\](1)\\"
ToRegExpPattern
→ vbslib.vbs
ToOldRegExpPattern
Function  GrepKeyword( NotEscapedString as string ) as string
検索キーワードを grep や egrep のコマンドラインに指定する形式に変換します。
【引数】
NotEscapedString
返り値
検索キーワード
grep や egrep のコマンドラインに指定する形式
Function  EGrepKeyword( NotEscapedString as string ) as string
返り値を grep や egrep のパラメーターに指定するときは、" " で囲んでください。
' ' で囲まないでください。 なぜなら \ がコマンドラインのエスケープ開始文字ではなく
なるからです。
Assert  GrepKeyword( "---\" ) = "\---\\\\"
grep -r "\---" *
(src)
(src)
→ T_Grep.vbs # [T_GrepKeyword]
テスト
サンプル
(src)
Function  GrepExpression( RegularExpression as string ) as string
RegularExpression
正規表現
RegularExpression 引数に指定した \ 文字は bash を経由しないときと同じになります。
例: \\\\ = \ 文字が2つをキーワードとする
RegularExpression 引数の先頭に、- を指定したときにオプションと扱われないように、
先頭に \ が付いたものが返ります。
RegularExpression 引数
Assert  GrepExpression( "---\" ) = "\---\\"
Assert  GrepExpression( "abc[A-Z]\def" ) = "abc[A-Z]\\def"
Assert  GrepKeyword( "abc[0]\def" ) = "abc\\[0\\]\\\\def"
関連
Function  find( keyword as string, path as string ) as string
テキストファイルの中で、指定したキーワードを含む行をまとめて返します。
【引数】
keyword
検索するキーワード
キーワードを含む行、または複数行
返り値
path
テキストファイルのパス
(src)
サンプル:
  lines = find( "<ERROR", "Test_logs.txt" )
Test_logs.txt ファイルのサンプル
start main.vbs
<ERROR msg='not found symbol'/>
Fail.
返り値のサンプル
<ERROR msg='not found symbol'/>
関連
Function  find_c( keyword as string, path as string ) as integer
テキストファイルの中で、指定したキーワードを含む行数を返します。
【引数】
keyword
path
検索するキーワード
テキストファイルのパス
キーワードを含む行数
返り値
(src)
テスト
→ T_fc.vbs
Function  SearchStringTemplate( FolderPath as string, RegularExpressionPart as string,
   TemplateStrings as array of string, Opt as Empty ) as array of array of GrepFound
テキストファイルの中をキーワードで検索し、どのテンプレートと一致するかを一覧します。
【引数】
FolderPath
RegularExpressionPart
検索対象フォルダーやワイルドカード
テンプレートの中にあるキーワード。複数行不可
TemplateStrings
テンプレート(複数行可)、または、その配列
返り値
の配列の配列
→ ToolsLib.vbs
ソース
T_SearchStringTemplate
関連
    founds = SearchStringTemplate( "TargetFolder", "(((", _
        "/***********" +vbCRLF+ _
        "((( ${FunctionName} ))$\{)" +vbCRLF+ _
        "************/" +vbCRLF, Empty )

    Assert  founds(0)(0).LineNum = 1  '// マッチした
    Assert  founds(0)(1).LineNum = 5  '// マッチした
    Assert  founds(1)(0).LineNum = 9  '// マッチしなかった
サンプル
TargetFolder フォルダーの中にあるテキストファイルの中から "(((" を検索し、見つかった
位置に、テンプレート(下記の複数行の文字列) がマッチしているものと、マッチしていない
ものに分けます。
/***********
((( FuncA ))${)
************/

/***********
((( FuncB ))${)
************/

/***********
((( FuncC )))
************/
検索対象のテキストファイル
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
… RegularExpressionPart 引数に指定した ((( にヒットするが、
  テンプレートに指定した ${ がないのでマッチしない
キーワードが見つかった位置が、指定したテンプレートの一部であるものと、そうでないものを
一覧します。 これを応用すれば、テンプレートの内容が違っていたり、古いテンプレートのまま
になっていたりするものを見つけることができます。
テンプレートは、可変の部分を "${変数名}" のように記述してください。 可変の部分は、複数行
にまたぐことができます。 SearchStringTemplate 関数はテンプレートの中の変数名を無視しま
すが、テンプレートを ScanFromTemplate 関数などにそのまま渡すことができます。
${ 文字は "$\{" と記述してください。 $\ 文字は "$\\" と記述してください。
関数名: ${FunctionName}
引数:   ${Arguments}
返り値: ${RerutnValue}
Opt
Empty を指定してください
返り値が founds のとき、founds(t)(i) の t は TemplateStrings 引数の配列番号、i はテンプレート
にマッチした複数の場所に 0 から順番につけた番号です。

i が配列の要素数に一致する要素は、TemplateStrings 引数に指定したどのテンプレートにも
マッチしなかったテキストについてです。
返り値
TemplateStrings 引数
配列の要素は、
です。
GrepFound オブジェクトのメンバー変数の内容は、次の通りです。
.Path
.LineNum
.LineText
ファイル名
Empty
Array( テンプレートの開始位置(1以上), テンプレートの次の位置 )
GetEchoStr に渡すと、次のように変わります。
テンプレートにマッチしたファイルの中の内容。 複数行の場合あり
行番号。 キーワードがある位置の行番号
ファイル名
.LineText
.LineNum
.Path
が使えます。